home *** CD-ROM | disk | FTP | other *** search
/ The Very Best of Atari Inside / The Very Best of Atari Inside 1.iso / sharew / accs / playman / source / playman.c next >
Encoding:
C/C++ Source or Header  |  1992-12-19  |  5.7 KB  |  241 lines

  1. /* ----------------- */
  2. /*  Include-Dateien    */
  3. /* ----------------- */
  4.  
  5. #include <portab.h>
  6. #include <aes.h>
  7. #include <tos.h>
  8. #include <sndbind.h>
  9.  
  10. #include "playman.rh"
  11. #include "playman.rsh"
  12.  
  13. /* ------------------- */
  14. /*  Globale Variablen  */
  15. /* ------------------- */
  16.  
  17. int x, y, w, h;
  18.  
  19. OBJECT *button;
  20.  
  21. /* --------------------- */
  22. /*  Funktionsprototypen  */
  23. /* --------------------- */
  24.  
  25. void do_it( void );                    /* Hauptschleife des Programms    */
  26. void open_dial ( int a );            /* Zeichnet eine Dialogbox            */
  27. void close_dial( void );            /* Schließt eine Dialogbox            */
  28. int  handle_dial( int a );            /* Bearbeitet Dialog komplett        */
  29. void slide_it( int a );                /* Routine für Schieberegler        */
  30. void get_data( void );                /* Holt aktuelle Lautstärke        */
  31.  
  32. main()
  33. {
  34.     int i, appl_id;
  35.     int msg_buf[8], menu_id;
  36.  
  37.     appl_id = appl_init( );        /* Beim AES anmelden                        */
  38.  
  39.     if ( !_app )                    /* Als Accessory gestartet?            */
  40.     {
  41.         menu_id = menu_register(appl_id,"  PlayMan ");
  42.  
  43.         for ( i = 0; i <= NUM_OBS-1; i++)    /* Resource anfixen        */
  44.         {
  45.             rsrc_obfix( &rs_object[i], 0 );    /* Für jedes Element        */
  46.         }
  47.  
  48.         if ( menu_id != -1 )                    /* Kein freier Eintrag ?    */
  49.         {
  50.             while (1)                            /* Endlosschleife des ACCs    */
  51.             {
  52.                 evnt_mesag( msg_buf );
  53.                 if ( !msg_buf[2] )
  54.                 {
  55.                     if ( msg_buf[0] == AC_OPEN && msg_buf[4] == menu_id )
  56.                          do_it();                    /* Das Hauptprogramm        */
  57.                 }
  58.             }
  59.         }
  60.         else
  61.         {
  62.             form_alert( 1,"[3][ Keine freien | Accessory-Einträge [ ABBRUCH ]" );
  63.             appl_exit();
  64.             return -1;
  65.         }
  66.     }
  67.     else
  68.     {
  69.         for ( i = 0; i <= NUM_OBS-1; i++)    /* Resource anfixen        */
  70.         {
  71.             rsrc_obfix( &rs_object[i], 0 );    /* Für jedes Element        */
  72.         }
  73.         do_it();                            /* Das Hauptprogramm    */
  74.         appl_exit();                    /* abmelden und raus    */
  75.         return 0;
  76.     }
  77. }
  78.  
  79. void do_it( void )
  80. {
  81.     int but;
  82.  
  83.     if ( locksnd( ) == SNDLOCKED )        /* Soundsubsystem belegt ?    */
  84.     {
  85.         form_alert( 1, rs_frstr[LOCKED]);    /* Alertbox zeigen        */
  86.         return;                                        /* und tschuess...        */
  87.     }
  88.     else unlocksnd( );                /* Sound-Subsystem freigeben        */
  89.  
  90.     button = rs_trindex[MAIN];
  91.  
  92.     get_data( );                        /* Akutelle Einstellungen holen    */
  93.  
  94.     devconnect (ADC,DAC,CLK_25M,CLK50K,NO_SHAKE);
  95.     soundcmd( ADDERIN, 1 );
  96.  
  97.     graf_mouse( ARROW, 0 );
  98.  
  99.     do
  100.     {
  101.         open_dial( MAIN );                    /* Hauptdialog öffnen        */
  102.         do
  103.         {
  104.             but = form_do( rs_trindex[MAIN], 0 ) & 0xff;
  105.             switch( but )
  106.             {
  107.                 case B_GAIN:
  108.                 case B_ATTEN:
  109.                     slide_it(but); break;    /* Schieber auswerten        */
  110.                 case B_MUSIK:
  111.                 {
  112.                     if ( button[B_MUSIK].ob_state & SELECTED )
  113.                         soundcmd( ADCINPUT, 0 );    /* Soundquelle = ADC    */
  114.                     else
  115.                         soundcmd( ADCINPUT, 3 );    /* Soundquelle = PSG    */
  116.                 }                        
  117.             }
  118.         } while( rs_trindex[MAIN][but].ob_flags & TOUCHEXIT );
  119.         rs_trindex[MAIN][but].ob_state &= ~SELECTED;
  120.         close_dial( );    
  121.  
  122.         if (but == B_INFO)    handle_dial( ABOUT );        /* Infobox    */
  123.  
  124.     } while ( but != B_OK );                    /* Auf wiederschön        */    
  125. }
  126.  
  127. void open_dial( baum )
  128. {
  129.     /* Dialog zentrieren, Growbox und Dialog zeichnen                    */
  130.  
  131.     wind_update( BEG_UPDATE );
  132.     form_center(rs_trindex[baum], &x, &y, &w, &h);
  133.     graf_growbox( x + w/2, y + h/2, 0, 0, x, y, w, h);
  134.    form_dial(FMD_START, x + w/2, y + h/2, 0, 0, x, y, w, h);
  135.     objc_draw( rs_trindex[baum] , ROOT, MAX_DEPTH, x, y, w, h);
  136. }
  137.  
  138. int handle_dial ( baum )
  139. {
  140.     /* Dialog zeichnen, ausführen, löschen, Exit-Button
  141.         deselktieren und an aufrufende Funktion weitergeben             */
  142.  
  143.     int exit_but;
  144.  
  145.     open_dial( baum );
  146.     exit_but = form_do(rs_trindex[baum], 0) & 0xFF;
  147.     close_dial(  );
  148.  
  149.     rs_trindex[baum][exit_but].ob_state &= ~SELECTED;
  150.     return exit_but;
  151. }
  152.  
  153. void close_dial( void )
  154. {
  155.     /* Shrinkbox zeichnen und Dialog löschen                                */
  156.  
  157.     graf_shrinkbox( x + w/2, y + h/2, 0, 0, x, y, w, h);
  158.    form_dial(FMD_FINISH, x + w/2, y + h/2, 0, 0, x, y, w, h);
  159.     wind_update( END_UPDATE );
  160. }
  161.  
  162. void slide_it( int but )
  163. {
  164.     int init_obx, obx, ht;
  165.     int init_m_x = -123;
  166.     int m_x, m_y, m_k, m_x_last =- 123;
  167.     int dummy;
  168.  
  169.     init_obx = button[but].ob_x;
  170.  
  171.     graf_mouse( FLAT_HAND, 0 );
  172.     while ( 1 )
  173.     {
  174.         graf_mkstate( &m_x, &m_y, &m_k,&dummy );
  175.         if(init_m_x == -123) init_m_x = m_x;
  176.         if ( !(m_k & 1 ) ) break;
  177.         {
  178.             if ( m_x != m_x_last )
  179.             {
  180.                 obx = init_obx+(m_x-init_m_x);
  181.  
  182.                 if(obx<0) obx=0;                
  183.                 if(obx>button[but-1].ob_width - button[but].ob_width)
  184.                 {
  185.                     obx = button[but-1].ob_width - button[but].ob_width;
  186.                 }
  187.                 button[but].ob_x = obx;
  188.                 if ( m_x_last != m_x )
  189.                 {
  190.                     m_x_last = m_x;
  191.                     ht = ( ( (button[but].ob_width - button[but-1].ob_width)- obx )*15)/(button[but].ob_width - button[but-1].ob_width) -15;
  192.                     ht <<= 4;
  193.  
  194.                     if(but==B_GAIN)
  195.                     { 
  196.                         objc_draw( rs_trindex[MAIN], but-1, MAX_DEPTH, 0,0,0,0 );
  197.                         soundcmd( RTGAIN, ht );
  198.                         soundcmd( LTGAIN, ht );
  199.                     }
  200.                     else if(but==B_ATTEN)
  201.                     {
  202.                         objc_draw( rs_trindex[MAIN], but-1, MAX_DEPTH, 0,0,0,0 );
  203.                         soundcmd( LTATTEN, ht );
  204.                         soundcmd( RTATTEN, ht );
  205.                     }
  206.                 }
  207.             }
  208.         }
  209.     }
  210.     graf_mouse( ARROW, 0 );
  211. }
  212.  
  213. void get_data( void )
  214. {
  215.     int atten, gain;
  216.  
  217.     /* Durchschnitt für Dämpfung und Verstärkung des linken und
  218.         rechten Kanals berechnen und neu setzen    */
  219.  
  220.     atten = ( soundcmd( LTATTEN, INQUIRE ) +    
  221.               soundcmd( RTATTEN, INQUIRE ) ) / 2;
  222.     gain = ( soundcmd( LTGAIN, INQUIRE ) + 
  223.               soundcmd( RTGAIN, INQUIRE ) ) / 2;
  224.  
  225.     /* Schieberegler im Dialog anpassen    */
  226.  
  227.     button[B_GAIN].ob_x = ( ( button[B_GAIN-1].ob_width - 
  228.     button[B_GAIN].ob_width ) / 15 ) * gain/16;
  229.  
  230.     button[B_ATTEN].ob_x = ( ( button[B_ATTEN-1].ob_width -
  231.     button[B_ATTEN].ob_width ) / 15 ) * atten/16;
  232.  
  233.     /* Button "Musik" in Abhängigkeit der akutellen Einstellungen
  234.         des ADCINPUT setzen. */
  235.  
  236.     if ( soundcmd( ADCINPUT, INQUIRE) == 0 )
  237.         button[B_MUSIK].ob_state = SELECTED;
  238.     else
  239.         button[B_MUSIK].ob_state = NORMAL;
  240. }
  241.